package com.czk.sparseArray;


/**
 * @Author:ChenZhangKun
 * @Date: 2020/6/7 21:00
 */
public class SparseArray {
    public static void main(String[] args) {
        // 创建一个二维数组11*11
        // 0 表示没有旗子、1表示黑子 2表示篮子
        int charArray[][]=new int[11][11];
        charArray[1][2]=1;
        charArray[2][3]=2;
        for (int[] ints : charArray) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
        }
        // 遍历二维数组，拿到非0的个数
        int sum=0;
        for (int i = 0; i <11 ; i++) {
            for (int j = 0; j < 11; j++) {
                if (charArray[i][j]!=0) sum++;
            }
        }
       // 创建稀疏数组
        int sparseArray[][]=new int[sum+1][3];
        // 给稀疏数组赋值
        sparseArray[0][0]=11;
        sparseArray[0][1]=11;
        sparseArray[0][2]=sum;
        // 将非0的值存入稀疏数组中
        int count=1; // 用于记录是第几个非0数据
        for (int i = 0; i <11 ; i++) {
            for (int j = 0; j < 11; j++) {
                if (charArray[i][j]!=0){
                    sparseArray[count][0]=i;
                    sparseArray[count][1]=j;
                    sparseArray[count][2]=charArray[i][j];
                    count++;
                }
            }
        }
        // 输出稀疏数组的格式
        for (int[] ints : sparseArray) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
        }
        // 将稀疏数组恢复成原始的二维数组
        int originArray[][]=new int[sparseArray[0][0]][sparseArray[0][1]];
        // 读取值来填入数组
        for (int i = 1; i < sparseArray.length; i++) {
            originArray[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
        }
        // 打印原数组
        for (int[] ints : originArray) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%s\t",anInt);
            }
        }
    }
}
